import axios, { AxiosRequestConfig } from "axios";
import { message as antdMessage } from "antd";

const request = axios.create({
  baseURL: "http://localhost:3001", // 根据环境变量来设置
  timeout: 1000 * 10,
});

request.interceptors.request.use(
  (config: AxiosRequestConfig) => {
    //  TODO. 请求头中添加 token 字段
    const token = localStorage.getItem("token");
    if (token) {
      config.headers!["token"] = token;
    }

    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

request.interceptors.response.use(
  // 2开头的会进入第一个回调
  (response) => {
    // 后端有一个 code 只有为 200 时，接口才表示成功
    const data = response.data;
    const { code, message } = data;
    if (code === "200") {
      //  成功
      return data;
    } else {
      if (code === "10119") {
        // token失效
        window.alert("token失败，请重新登录");
        // 退出登录，重新进入登录页面的操作
        window.localStorage.clear();
        // 最原始的跳转页面
        window.location.replace("/login");
      } else {
        // message 提示
        antdMessage.error(message);
        return Promise.reject(new Error(message));
      }
    }
  },
  // 否则进入第二个回调
  (error) => {
    return Promise.reject(error);
  }
);

export default request;
